home *** CD-ROM | disk | FTP | other *** search
/ Aminet 24 / Aminet 24 (1998)(GTI - Schatztruhe)[!][Apr 1998].iso / Aminet / comm / misc / CapiRexxVoiceM.lha / CallerID.c < prev    next >
Encoding:
C/C++ Source or Header  |  1998-02-03  |  4.0 KB  |  220 lines

  1. /* How to compile:
  2. ** sc MyCapi.c
  3. ** sc CallerID.c
  4. ** sc capi-usr.c
  5. ** slink from LIB:c.o MyCAPI.o CallerID.o to CallerID LIB capi-usr.o LIB:sc.lib
  6. */
  7.  
  8. #include <proto/dos.h>
  9. #include <proto/exec.h>
  10. #include <stdio.h>
  11. #include <stdarg.h>
  12. #include <string.h>
  13. #include <dos.h>
  14. #include <dos/rdargs.h>
  15. #include <exec/types.h>
  16.  
  17. #include "os.h"
  18. #include "capi-usr.h"
  19. #include "MyCAPI.h"
  20.  
  21. /*
  22. ** Globals
  23. */
  24. U8         outputbuff[256];
  25. U8        *actioncmd = NULL;
  26. U8        *phonebook = NULL;
  27. U8        *version = "$VER: CallerID 2.1 (18.11.97) © Frederic Steinfels";
  28. BOOL     debugcapi = FALSE;
  29. struct     Task *maintask;
  30. FILE    *phonebookfile;
  31.  
  32.  
  33. /*
  34. ** Locals
  35. */
  36. static U32  ctrlnum = 1;
  37. static U8 *logname = NULL;
  38. static FILE *logfile;
  39.  
  40.  
  41. /*
  42. ** Code
  43. */
  44.  
  45. /****************************************************************************
  46. **    Um die CTRL-C Behandlungsroutine vom SAS-C lahmzulegen.
  47. */
  48. int brk(void)
  49. {
  50.     return 0;
  51. }
  52.  
  53.  
  54. /****************************************************************************
  55. ** Oeffnet das Logfile, wenn flag 1 ist, wird das alte geloescht.
  56. */
  57. static BOOL openlog(BOOL flag)
  58. {
  59.     if (logname != NULL) {
  60.         if (logfile = fopen(logname, flag ? "w" : "a"))
  61.             return TRUE;
  62.     }
  63.     return FALSE;
  64. }
  65.  
  66.  
  67. /****************************************************************************
  68. ** Schliesst das Logfile
  69. */
  70. static VOID closelog(VOID)
  71. {
  72.     if (logfile) {
  73.         fclose(logfile);
  74.         logfile = NULL;
  75.     }
  76. }
  77.  
  78.  
  79.  
  80. /****************************************************************************
  81. ** Ausgaberoutine (inkl. Datum/Uhrzeit)
  82. ** Achtung, diese Routine wird auch vom CAPI-SignalHandler Callback
  83. ** benuetzt !
  84. */
  85. VOID myoutput(U8 *fmt, ...)
  86. {
  87.     struct DateStamp ds;
  88.     struct DateTime dt;
  89.     U8 day[32], date[32], time[32], buff[256];
  90.     va_list arg;
  91.  
  92.     /*
  93.     ** Datum/Uhrzeit voranstellen
  94.     */
  95.     DateStamp(&ds);
  96.     dt.dat_Stamp = ds;
  97.     dt.dat_Format = FORMAT_CDN;
  98.     dt.dat_Flags = 0;
  99.     dt.dat_StrDay = day;
  100.     dt.dat_StrDate = date;
  101.     dt.dat_StrTime = time;
  102.     DateToStr(&dt);
  103.     sprintf(buff, "%.3s %s %s ", day, date, time);
  104.     if (openlog(0)) {
  105.         fwrite(buff, strlen(buff), 1, logfile);
  106.         closelog();
  107.     }
  108.     printf(buff);
  109.  
  110.     /*
  111.     ** Text ausgeben
  112.     */
  113.     va_start(arg, fmt);
  114.     vsprintf(buff, fmt, arg);
  115.     va_end(arg);
  116.     if (openlog(0)) {
  117.         fwrite(buff, strlen(buff), 1, logfile);
  118.         fwrite("\n", 1, 1, logfile);
  119.         closelog();
  120.     }
  121.     puts(buff);
  122. }
  123.  
  124.  
  125. /****************************************************************************
  126. ** Das Programm ...
  127. */
  128. void main(int argc, char **argv)
  129. {
  130.     #define TEMPLATE "CONTROLLER/N,DEBUG/S,LOGFILE/K,PHONEBOOK/K,ACTIONCOMMAND/K"
  131.     #define OPT_CONTROLLER 0
  132.     #define OPT_DEBUG 1
  133.     #define OPT_LOGFILE 2
  134.     #define OPT_PHONEBOOK 3
  135.     #define OPT_ACTIONCOMMAND 4
  136.     #define OPT_COUNT 5
  137.     
  138.     LONG result[OPT_COUNT];
  139.     U32 *val;
  140.     unsigned char *valc;
  141.     
  142.     struct RDArgs *rdargs;
  143.     
  144.     maintask = FindTask(NULL);
  145.  
  146.     /*
  147.     ** Erstmal testen, ob CAPI ueberhaupt installiert ist ...
  148.     */
  149.     if (U_CAPI_INSTALLED()) {
  150.         myoutput("FEHLER: CAPI 2.0 nicht installiert !");
  151.         return;
  152.     }
  153.  
  154.     /*
  155.     ** Kommandozeile auswerten
  156.     */
  157.  
  158.     result[OPT_CONTROLLER] = 0;
  159.     result[OPT_DEBUG] = FALSE;
  160.     result[OPT_LOGFILE] = NULL;
  161.     result[OPT_PHONEBOOK] = NULL;
  162.     result[OPT_ACTIONCOMMAND] = NULL;
  163.  
  164.     if (rdargs = ReadArgs(TEMPLATE, result, NULL))
  165.     {
  166.         debugcapi = FALSE;
  167.         if (result[OPT_DEBUG])
  168.         {
  169.             debugcapi = TRUE;
  170.         }
  171.         ctrlnum = 1;
  172.         if (val = (U32 *)result[OPT_CONTROLLER])
  173.         {
  174.             ctrlnum = *val;
  175.         }
  176.         logname = NULL;
  177.         if (valc = (U8 *)result[OPT_LOGFILE])
  178.         {
  179.             logname = valc;
  180.         }
  181.         phonebook = NULL;
  182.         if (valc = (U8 *)result[OPT_PHONEBOOK])
  183.         {
  184.             phonebook = valc;
  185.         }
  186.         actioncmd = NULL;
  187.         if (valc = (U8 *)result[OPT_ACTIONCOMMAND])
  188.         {
  189.             actioncmd = valc;
  190.         }
  191.  
  192.         /*
  193.         ** CTRL-C ausschalten
  194.         */
  195.         if (onbreak(&brk)) {
  196.             myoutput("FEHLER: Kann CTRL-C nicht ausschalten!");
  197.             return;
  198.         }
  199.     
  200.         /*
  201.         ** CAPI initialisieren
  202.         */
  203.         if (MYCAPI_Init(ctrlnum)) {
  204.             for (;;) {
  205.                 if (Wait(SIGBREAKF_CTRL_C | SIGF_SINGLE) & SIGBREAKF_CTRL_C)
  206.                     break;
  207.                 myoutput(outputbuff);
  208.             }
  209.         } else
  210.             myoutput("FEHLER: CAPI-Initialisierung fehlgeschlagen!");
  211.     
  212.         /*
  213.         ** CAPI-Resourcen wieder freigeben (immer nach MYCAPI_Init()!)
  214.         */
  215.         MYCAPI_Exit();
  216.     
  217.     }
  218.     FreeArgs(rdargs);
  219. }
  220.